package org.test

@Configuration
@EnableIntegration
class SpringIntegrationExample implements CommandLineRunner {

    @Autowired
    private ApplicationContext context;

    @Bean
    DirectChannel input() {
        new DirectChannel();
    }

    @Override
    void run(String... args) {
        println()
        println '>>>> ' + new MessagingTemplate(input()).convertSendAndReceive("World", String) + ' <<<<'
        println()
        /*
         *  Since this is a simple application that we want to exit right away,
         *  close the context. For an active integration application, with pollers
         *  etc, you can either suspend the main thread here (e.g. with System.in.read()),
         *  or exit the run() method without closing the context, and stop the
         *  application later using some other technique (kill, JMX etc).
         */
        context.close()
    }
}

@MessageEndpoint
class HelloTransformer {

    @Transformer(inputChannel = "input")
    String transform(String payload) {
        "Hello, ${payload}"
    }

}
